home *** CD-ROM | disk | FTP | other *** search
/ Programming Windows 95 with MFC / Programming Windows 95 with MFC (Microsoft Programming Series)(097-0001465)(1996).iso / CODE / Chap13 / GridDemo / GridDemo.cpp next >
C/C++ Source or Header  |  1996-04-05  |  5KB  |  174 lines

  1. //***********************************************************************
  2. //
  3. //  GridDemo.cpp
  4. //
  5. //***********************************************************************
  6.  
  7. #include <afxwin.h>
  8. #include <afxcmn.h>
  9. #include "Resource.h"
  10. #include "GridDemo.h"
  11.  
  12. CMyApp myApp;
  13.  
  14. /////////////////////////////////////////////////////////////////////////
  15. // CMyApp member functions
  16.  
  17. BOOL CMyApp::InitInstance ()
  18. {
  19.     m_pMainWnd = new CMainWindow;
  20.     m_pMainWnd->ShowWindow (m_nCmdShow);
  21.     m_pMainWnd->UpdateWindow ();
  22.     return TRUE;
  23. }
  24.  
  25. /////////////////////////////////////////////////////////////////////////
  26. // CMainWindow message map and member functions
  27.  
  28. BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)
  29.     ON_WM_PAINT ()
  30.     ON_COMMAND (IDM_OPTIONS_SETTINGS, OnOptionsSettings)
  31.     ON_COMMAND (IDM_OPTIONS_EXIT, OnOptionsExit)
  32. END_MESSAGE_MAP ()
  33.  
  34. CMainWindow::CMainWindow ()
  35. {
  36.     m_cx = m_cy = 8;
  37.     m_nWeight = 4;
  38.     
  39.     Create (NULL, "Grid Demo", WS_OVERLAPPEDWINDOW, rectDefault,
  40.         NULL, MAKEINTRESOURCE (IDR_MAINFRAME));
  41. }
  42.  
  43. void CMainWindow::OnPaint ()
  44. {
  45.     CRect rect;
  46.     GetClientRect (&rect);
  47.  
  48.     int nShade = m_nWeight * 32;
  49.     if (nShade != 0)
  50.         nShade--;
  51.  
  52.     CPaintDC dc (this);
  53.     CPen pen (PS_SOLID, 1, RGB (nShade, nShade, nShade));
  54.     CPen* pOldPen = dc.SelectObject (&pen);
  55.  
  56.     int x;
  57.     for (int i=1; i<m_cx; i++) {
  58.         x = (rect.Width () * i) / m_cx;
  59.         dc.MoveTo (x, 0);
  60.         dc.LineTo (x, rect.Height ());
  61.     }
  62.  
  63.     int y;
  64.     for (i=1; i<m_cy; i++) {
  65.         y = (rect.Height () * i) / m_cy;
  66.         dc.MoveTo (0, y);
  67.         dc.LineTo (rect.Width (), y);
  68.     }
  69.  
  70.     dc.SelectObject (pOldPen);
  71. }
  72.  
  73. void CMainWindow::OnOptionsSettings ()
  74. {
  75.     CSettingsDialog dlg (this);
  76.  
  77.     dlg.m_cx = m_cx;
  78.     dlg.m_cy = m_cy;
  79.     dlg.m_nWeight = m_nWeight;
  80.  
  81.     if (dlg.DoModal () == IDOK) {
  82.         m_cx = dlg.m_cx;
  83.         m_cy = dlg.m_cy;
  84.         m_nWeight = dlg.m_nWeight;
  85.  
  86.         Invalidate ();
  87.     }
  88. }
  89.  
  90. void CMainWindow::OnOptionsExit ()
  91. {
  92.     SendMessage (WM_CLOSE, 0, 0);
  93. }
  94.  
  95. /////////////////////////////////////////////////////////////////////////
  96. // CSettingsDialog message map and member functions
  97.  
  98. BOOL CSettingsDialog::OnInitDialog ()
  99. {
  100.     CDialog::OnInitDialog ();
  101.  
  102.     // Initialize the slider
  103.     CSliderCtrl* pSlider = (CSliderCtrl*) GetDlgItem (IDC_SLIDER);
  104.     pSlider->SetRange (0, 8);
  105.     pSlider->SetPos (m_nWeight);
  106.  
  107.     // Initialize the first spin button
  108.     CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*) GetDlgItem (IDC_SPINHORZ);
  109.     pSpin->SetRange (2, 64);
  110.  
  111.     // Initialize the second spin button
  112.     pSpin = (CSpinButtonCtrl*) GetDlgItem (IDC_SPINVERT);
  113.     pSpin->SetRange (2, 64);
  114.  
  115.     // Create and initialize a tooltip control
  116.     m_ctlTT.Create (this);
  117.     m_ctlTT.AddWindowTool (GetDlgItem (IDC_SLIDER),
  118.         MAKEINTRESOURCE (IDS_SLIDER));
  119.     m_ctlTT.AddWindowTool (GetDlgItem (IDC_EDITHORZ),
  120.         MAKEINTRESOURCE (IDS_EDITHORZ));
  121.     m_ctlTT.AddWindowTool (GetDlgItem (IDC_EDITVERT),
  122.         MAKEINTRESOURCE (IDS_EDITVERT));
  123.  
  124.     return TRUE;
  125. }
  126.  
  127. void CSettingsDialog::OnOK ()
  128. {
  129.     CSliderCtrl* pSlider = (CSliderCtrl*) GetDlgItem (IDC_SLIDER);
  130.     m_nWeight = pSlider->GetPos ();
  131.     CDialog::OnOK ();
  132. }
  133.  
  134. void CSettingsDialog::DoDataExchange (CDataExchange* pDX)
  135. {
  136.     CDialog::DoDataExchange (pDX);
  137.  
  138.     DDX_Text (pDX, IDC_EDITHORZ, m_cx);
  139.     DDV_MinMaxInt (pDX, m_cx, 2, 64);
  140.     DDX_Text (pDX, IDC_EDITVERT, m_cy);
  141.     DDV_MinMaxInt (pDX, m_cy, 2, 64);
  142. }
  143.  
  144. /////////////////////////////////////////////////////////////////////////
  145. // CMyToolTipCtrl member functions
  146.  
  147. BOOL CMyToolTipCtrl::AddWindowTool (CWnd* pWnd, LPCTSTR pszText)
  148. {
  149.     TOOLINFO ti;
  150.     ti.cbSize = sizeof (TOOLINFO);
  151.     ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
  152.     ti.hwnd = pWnd->GetParent ()->GetSafeHwnd ();
  153.     ti.uId = (UINT) pWnd->GetSafeHwnd ();
  154.     ti.hinst = AfxGetInstanceHandle ();
  155.     ti.lpszText = (LPTSTR) pszText;
  156.  
  157.     return (BOOL) SendMessage (TTM_ADDTOOL, 0, (LPARAM) &ti);
  158. }
  159.  
  160. BOOL CMyToolTipCtrl::AddRectTool (CWnd* pWnd, LPCTSTR pszText,
  161.     LPCRECT lpRect, UINT nIDTool)
  162. {
  163.     TOOLINFO ti;
  164.     ti.cbSize = sizeof (TOOLINFO);
  165.     ti.uFlags = TTF_SUBCLASS;
  166.     ti.hwnd = pWnd->GetSafeHwnd ();
  167.     ti.uId = nIDTool;
  168.     ti.hinst = AfxGetInstanceHandle ();
  169.     ti.lpszText = (LPTSTR) pszText;
  170.     ::CopyRect (&ti.rect, lpRect);
  171.  
  172.     return (BOOL) SendMessage (TTM_ADDTOOL, 0, (LPARAM) &ti);
  173. }
  174.